10550. Замок с комбинацией
Замок имеет циферблат с 40
делениями как показано на рисунке ниже. Деления пронумерованы от 0 до 39. Для
открытия замка следует знать комбинацию a, b, c. и
совершить следующие действия:
·
повернуть циферблат по часовой стрелке на 2 полных оборота;
·
продолжая поворачивать циферблат по часовой стрелке, остановиться на
первом числе комбинации;
·
повернуть циферблат против часовой стрелки на 1 полный оборот;
·
продолжая поворачивать циферблат против часовой стрелки, остановиться на
втором числе комбинации;
·
повернуть циферблат по часовой стрелке до третьего числа комбинации;
·
открыть замок.
Имеется
исходное состояние замка p. Вычислить суммарное число градусов, на
которое повернется циферблат по или против часовой стрелки до его открытия.
Вход.
Состоит из нескольких тестов. Каждый тест содержит четыре целых числа p,
a, b, c. Последний тест содержит p = a = b = c = 0
и не обрабатывается.
Выход. Для каждого теста вывести
суммарное количество градусов, на которое будет поворачиваться циферблат как
по, так и против часовой стрелки.
0 30 0 30
5 35 5 35
0 20 0 20
7 27 7 27
0 10 0 10
9 19 9 19
0 0 0 0
Пример выхода
1350
1350
1620
1620
1890
1890
элементарные вычисления
Посмотрим на рисунок. Следует
заметить, что поворот циферблата по (против) часовой стрелке относительно
указателя ключа эквивалентно движению этого указателя по циферблату против (по)
часовой стрелке. То есть если изначально циферблат стоял на отметке 0 и его
повернули по часовой стрелке на отметку 10, то циферблат будет повернут на 270
градусов (а не 90). Одно деление циферблата соответствует 360 / 40 = 9
градусам. Если циферблат поворачивают с метки a на метку b по
часовой стрелке, то он будет повернут на (a – b + 40) mod 40 * 9
градусов. Если против, то поворот произойдет на (b – a + 40) mod
40 * 9 градусов. Далее следует просуммировать градусы поворота циферблата для
всех действий, ведущих к открытию замка.
Рассмотрим первый тест. Два
полных оборота соответствуют 720 градусам. До первого числа следует повернуть
циферблат на (0 – 30 + 40) mod 40 * 9 = 90 градусов. Один полный оборот по
часовой стрелке даст 360 градусов. Поворот до второго числа 0 против часовой
стрелке повернет циферблат на (0 – 30 + 40) mod 40 * 9 = 90 градусов. Поворот
до третьего числа 30 почасовой стрелке произойдет на (0 – 30 + 40) mod 40 * 9 =
90 градусов. В итоге циферблат будет повернут на 720 + 90 + 360 + 90 + 90 =
1350 градусов.
Читаем
входные данные, суммируем число градусов для каждого поворота и выводим
результат.
while(scanf("%d
%d %d %d",&p,&a,&b,&c),p + a + b + c)
{
angle = 720 + ((40 + p - a) % 40) * 9;
angle = angle + 360 + ((b - a + 40) % 40) *
9;
angle = angle + ((b - c + 40) % 40) * 9;
printf("%d\n",angle);
}